Spring Security-র Remember-Me ফিচার ব্যবহারকারীদের দীর্ঘ সময় ধরে লগইন অবস্থায় রাখতে সাহায্য করে, এমনকি ব্রাউজার বন্ধ হওয়ার পরেও। এটি সাধারণত একটি কুকি ব্যবহার করে কাজ করে, যা ব্যবহারকারীর তথ্য সংরক্ষণ করে।
Remember-Me ফিচারের সুবিধা
- Extended Authentication: ব্যবহারকারীকে বারবার লগইন করতে হয় না।
- Customizable: Remember-Me ফিচারকে সহজেই কাস্টমাইজ করা যায়।
- Cookie-based Implementation: সাধারণত একটি নিরাপদ কুকি ব্যবহার করে তথ্য সংরক্ষণ করা হয়।
- Token-based Support: একটি টোকেন ব্যবহার করে Remember-Me বৈধতা নিশ্চিত করা হয়।
Remember-Me এর কাজের পদ্ধতি
- ব্যবহারকারী সফলভাবে লগইন করলে, একটি Remember-Me কুকি ব্রাউজারে সেট করা হয়।
- ব্যবহারকারী পরবর্তী বার অ্যাপ্লিকেশনে প্রবেশ করলে, কুকির তথ্য যাচাই করে স্বয়ংক্রিয়ভাবে লগইন করা হয়।
- এই প্রক্রিয়া নিরাপদ রাখতে টোকেন এনক্রিপশন এবং কুকি ভ্যালিডেশন ব্যবহার করা হয়।
Implementation Steps
Step 1: Maven Dependency
pom.xml ফাইলে Spring Security ডিপেন্ডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Step 2: Security Configuration
Example: Basic Remember-Me Configuration
একটি Java কনফিগারেশন ক্লাস তৈরি করুন যেখানে Remember-Me কনফিগার করা হবে।
package com.example.security;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated() // All requests require authentication
.and()
.formLogin() // Enable form-based login
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll()
.and()
.rememberMe() // Enable Remember-Me feature
.key("uniqueAndSecret") // Unique key for hashing
.tokenValiditySeconds(1209600); // 14 days (in seconds)
return http.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); // Password hashing
}
}
Step 3: Add Login Page
একটি কাস্টম লগইন পৃষ্ঠা যোগ করুন:
Controller:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
}
HTML (login.html):
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="/login" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br>
<label>
<input type="checkbox" name="remember-me"> Remember Me
</label><br>
<button type="submit">Login</button>
</form>
</body>
</html>
Step 4: Token-based Remember-Me (Optional)
Persistent Token Approach
Remember-Me ফিচার আরও সুরক্ষিত করতে ডাটাবেসে টোকেন সংরক্ষণ করুন:
Token Table তৈরি করুন: Spring Security টোকেন সংরক্ষণের জন্য একটি টেবিল তৈরি করবে।
CREATE TABLE persistent_logins ( username VARCHAR(64) NOT NULL, series VARCHAR(64) NOT NULL, token VARCHAR(64) NOT NULL, last_used TIMESTAMP NOT NULL, PRIMARY KEY (series) );PersistentTokenRepository কনফিগার করুন:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository; import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl; import javax.sql.DataSource; @Configuration public class RememberMeTokenConfig { @Bean public PersistentTokenRepository persistentTokenRepository(DataSource dataSource) { JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl(); tokenRepository.setDataSource(dataSource); return tokenRepository; } }Update Security Configuration:
http .rememberMe() .tokenRepository(persistentTokenRepository(dataSource)) .tokenValiditySeconds(1209600) // 14 days .key("uniqueAndSecret");
Customizing Remember-Me
- Token Expiration Time:
.tokenValiditySeconds(604800)→ 7 দিন (সেকেন্ডে)। - Custom Cookie Name:
.rememberMeCookieName("my-remember-me-cookie") - Custom Key:
.key("myUniqueKey")→ কুকির নিরাপত্তা উন্নত করতে।
Best Practices
- Use Persistent Token Repository: এটি Remember-Me কুকি চুরি প্রতিরোধ করে।
- Use HTTPS: কুকি চুরি এবং ম্যান-ইন-দ্য-মিডল আক্রমণ থেকে রক্ষা পেতে।
- Limit Token Validity: টোকেনের বৈধতা সময় সীমিত রাখুন (উদাহরণ: 7 বা 14 দিন)।
- Secure Key:
.key()এর মান গোপন এবং অনন্য রাখুন।
Spring Security-র Remember-Me ফিচার ব্যবহারকারীর অভিজ্ঞতা উন্নত করে এবং দীর্ঘ সময় ধরে সেশন মেইনটেইন করতে সাহায্য করে। সঠিক কনফিগারেশনের মাধ্যমে এটি নিরাপদ এবং কার্যকর করা সম্ভব।
Read more